#include "Driver_TIM2.h"

void Driver_TIM2_Init(void)
{
    /* 开启时钟 */
    RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;
    /* 预分频的值 */
    TIM2->PSC = 7200 - 1;
    /* 重装载寄存器的值  中断周期是1ms */
    TIM2->ARR = 10 - 1;
    /* 设置ug位,触发一次更新事件 */
    TIM2->EGR |= TIM_EGR_UG;
    /* 清除中断标志位 */
    TIM2->SR &= ~TIM_SR_UIF;
    /* 开启更新中断 */
    TIM2->DIER |= TIM_DIER_UIE;

    /* NVIC的配置  优先级组已经配置过了 */
    NVIC_SetPriority(TIM2_IRQn, 5);
    NVIC_EnableIRQ(TIM2_IRQn);
}

void Driver_TIM2_Start(void)
{
    /* 使能计数器 */
    TIM2->CR1 |= TIM_CR1_CEN;
}

void Driver_TIM2_Stop(void)
{
    /* 失能计数器 */
    TIM2->CR1 &= ~TIM_CR1_CEN;
}

// ms中断回调函数
__weak void TIM2_UpInterruptMsCallBack(uint32_t msCount)
{
}

#include "Common_Debug.h"
uint32_t msCount = 0;
/* 更新中断服务函数 */
void TIM2_IRQHandler(void)
{
    if(msCount == 0) debug_printfln("%p", &msCount);
    /* 清除中断标志位 */
    TIM2->SR &= ~TIM_SR_UIF;
    /* 每1ms产生一次中断 */
    msCount++;
    TIM2_UpInterruptMsCallBack(msCount);
}